#include<iostream>
#include<vector>
#include<algorithm>
using std::max;
using std::vector;

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if (prices.size() <= 1) return 0;
        int n = prices.size();
        vector<vector<int>> dp(n, vector<int>(3, 0));
        // 设计三种不同状态(皆为当天结束时的状态， 冷冻期为next day的状态)
        // dp[i][0] 代表第i天持有股票下的最大利润
        // dp[i][1] 代表第i天不持有股票且不在冷冻期的最大利润
        // dp[i][2] 代表第i天不持有且在冷冻期
        dp[0][0] = -prices[0];
        for (int i = 1; i < n; i++) {
            // 持有的最大利润为 i-1天持有股票的最大利润 / i-1天不持有且在冷冻期+i天购买 / i-1天不持有且不在冷冻期 + i
            dp[i][0] = max(dp[i-1][0], dp[i-1][1] - prices[i]);

            // 不在冷冻期的最大利润
            // i-1天持有股票i天卖 / i-1天不持有且i天也不买
            dp[i][1] = max(dp[i-1][1], dp[i-1][2]);

            // 在冷冻期的最大利润，当天不能买
            // 必然是i-1天卖出股票
            dp[i][2] = dp[i-1][0] + prices[i];
        }

        return max(dp[n-1][1], dp[n-1][2]);
    }
};

int main() {
    int tmp;
    vector<int> input;
    while (std::cin >> tmp) {
        input.push_back(tmp);
        std::cout << tmp << " ";
    }
    std::cout << "\n";
    int ans = Solution().maxProfit(input);
    std::cout << "Max Profit: " << ans << "\n";
    return 0;
}